home *** CD-ROM | disk | FTP | other *** search
/ Mind Run / Mind Run (1991)(Crealude)(FR)(M6)[!][CFI MINDRUM 91148].iso / a48.amos / a48.amosSourceCode next >
AMOS Source Code  |  2008-12-15  |  25KB  |  758 lines

  1. '                            A48                       18  4  91   
  2. Set Buffer 20 : Close Workbench : Close Editor : Hide On 
  3. If Exist("CFI:") : Dir$="CFI:" : Else Dir$="GIGUNA:GAMOS/" : End If 
  4. '
  5. Dim TPTS(6),ZBUT(28),BBUT(28),ZBI(36),RSV(16,2),H(28),V(28),CPL(8,3)
  6. Dim XB(2),YB(2),Z(36),CUR(12,9,2),GAM$(12),PREF(5),SON(14,6,3),F$(20)
  7. Global TEST,TPTS(),TEMPS,PTS,APTS,NBK,NBI,NB,NBUT,ZBUT(),BBUT(),DIFF
  8. Global BUT$,SG$,SA$,SB$,ZBI(),RSV(),H(),V(),CPL(),XB(),YB(),Z(),CUR(),HCR,VCR
  9. Global BBOULE,XT,YT,XH,YH,XR,YR,BCUR,HCURS,VCURS,XC,YC,XP,YP,CX,CY,SON()
  10. Global BCP,CYCLETAPE,ETAPE,QST,MXETAPE,DIFF,DERANN$,ELTEMPS,GAUCHE
  11. Global DUREE,VITESSE,BZN,MZ,ABANDON,RENOUV$,TSAB,TREN,LANGUE$,TEST$
  12. Global LIGNE,DIT,GAM$(),PREF(),BOUTONS,BOUTONA,BOUTONB,FAITMUSE
  13. Global BOULBK,CRSBK,FLCHBK,CERVBK,BASEBLOCK,F$(),DERBRUIT$
  14. LANGPREF: Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  15. CLOCK[280,160]
  16. If Screen<>1
  17.    PREF(1)=1 : For X=2 To 5 : PREF(X)=0 : Next 
  18.    Goto LIRE_LES_PREFCDTV
  19.    RETOUR:
  20.    S$=Str$(RESUL)-" " : If Not(Instr("123456 13",S$)) : PREF(3)=4 : End If 
  21.    Restore LANGPREF : For X=1 To PREF(3) : Read LANGUE$ : Next 
  22.    Load Iff "Decors/Entree"+LANGUE$,1 : Flash Off : Double Buffer 
  23. Else 
  24.    Double Buffer : PRENDVAR : Load "BanqueI/Ftdb.abk"
  25.    For Y=1 To 4 : METTOTAL["+",TPTS(Y),373,82+24*(Y-1)] : Next 
  26. End If : Curs Off 
  27. Colour 0,0 : Colour Back 0 : Wait Vbl : View : Hide On 
  28. For Y=1 To 4
  29.    If TPTS(Y)>99 Then MBK=Length(1) : Load "banqueb/A.Bobentree.abk",1 : Exit 
  30. Next 
  31. NT=0 : For Y=1 To 4 : For X=0 To 2
  32.       If TPTS(Y)>99+60*X
  33.          Paste Bob 467-20*X,81+24*(Y-1),MBK+1 : Wait Vbl : Inc NT
  34.       End If 
  35. Next : Next 
  36. CERVOR: Data 404,22,404,44,379,58,353,43,353,43,353,43,353,21,379,7
  37. Restore CERVOR : For N=1 To 6
  38.    If NT>2*N-1 Then Read H,V : Paste Bob H,V,MBK+2 : Wait Vbl 
  39. Next 
  40. Hide On 
  41. Limit Mouse 
  42. XB(0)=280 : YB(0)=46 : Rem Suite
  43. XB(1)=295 : YB(1)=63 : Rem Help 
  44. XB(2)=278 : YB(2)=79 : Rem Encore 
  45. BCUR=63 : Rem N∩┐╜ de bob du curseur 
  46. XP=282 : YP=4 : APTS=0 : BBOULE=15 : Rem bob des points sur le boulier
  47. XC=253 : YC=177 : Rem compteur d'∩┐╜tapes
  48. XT=209 : YT=24 : Rem compteur du total
  49. BOULBK=1 : CRSBK=2 : FLCHBK=3 : CERVBK=4 : BASEBLOCK=4 : Rem Blocks de base 
  50. BZN=8
  51. Erase 6 : Reserve As Chip Work 6,$FFFF
  52. Reserve As Chip Work 7,32000 : Load "MRbruits/Brt.sbk",7
  53. Wait 50 : DROITE[1,125] : Wait 50 : GAUCHE[1,125] : GAUCHE=True
  54. Do 
  55.    MXETAPE=40 : CLOCK[280,160] : B$="TitrorP"+LANGUE$ : BANQBI[B$,""]
  56.    PARLE["Category",2] : Hide On 
  57.    '  
  58.    MZ=1+Rnd(3) : VIDCUR[0]
  59.    For Y=1 To 4
  60.       CUR(1,Y-1,0)=315 : CUR(1,Y-1,1)=50+24*Y : CUR(1,Y-1,2)=Y
  61.       CUR(2,Y-1,0)=315 : CUR(2,Y-1,1)=50+24*Y : CUR(2,Y-1,2)=Y
  62.    Next 
  63.    CUR(0,0,0)=30 : CUR(0,0,1)=60 : CUR(0,0,2)=5
  64.    CUR(0,1,0)=30 : CUR(0,1,1)=60 : CUR(0,1,2)=5
  65.    CUR(0,2,0)=30 : CUR(0,2,1)=140 : CUR(0,2,2)=6
  66.    CUR(0,3,0)=30 : CUR(0,3,1)=140 : CUR(0,3,2)=6
  67.    CX=1 : CY=MZ-1 : INICURS[CX,CY] : HCR=2 : VCR=3
  68.    X1=169 : If LANGUE$="All" Then X1=138
  69.    For X=1 To 5+Rnd(4)
  70.       Wait 10 : Add CY,1,0 To 3
  71.       Y1=53 : If(LANGUE$="All") and(CY=2) Then Y1=49
  72.       Bob 1,X1,Y1+(CY+1)*24,CY+1
  73.       Bob BCUR,CUR(1,CY,0),CUR(1,CY,1), : Wait Vbl 
  74.    Next 
  75.    ALEAMUS[1] : INETOILE
  76.    Do 
  77.       F=Free : X1=169 : If LANGUE$="All" Then X1=138
  78.       CURSEUR[2] : Exit If BOUTONS
  79.       If(CX>0) and(MZ<5)
  80.          Y1=53 : If(LANGUE$="All") and(MZ=3) : Y1=49 : End If 
  81.          Bob 1,X1,Y1+MZ*24,MZ : Wait Vbl 
  82.       End If 
  83.       If CX>1 and GAUCHE
  84.          Amal Off 3 : Bob 3,,,NBK+16 : Amal Off 15 : AJOUR
  85.          DROITE[1,125] : GAUCHE=False : Wait 20
  86.          INETOILE : INICURS[CX,CY]
  87.       End If 
  88.       If CX<2 and Not(GAUCHE)
  89.          Amal Off 3 : Bob 3,,,NBK+16 : Amal Off 15 : AJOUR
  90.          GAUCHE[1,125] : GAUCHE=True
  91.          INETOILE : INICURS[CX,CY]
  92.       End If 
  93.    Loop : F=Free : ALEAMUS[0]
  94.    If(MZ>0) and(MZ<5) : TEST=MZ
  95.       BRUITB[100] : Amal Off : Bob BCUR,,,NBK+16 : AJOUR : Put Bob 1
  96.       AJOUR : Bob Off : AJOUR : Erase 1 : Erase 2
  97.       If Not(GAUCHE) : GAUCHE[1,125] : End If 
  98.       MATIERES: Data "Memory","Stress","Sounds","Reflex"
  99.       Restore MATIERES : For X=1 To TEST : Read TEST$ : Next 
  100.       '
  101.       CLOCK[280,160] : A$="Decors/"+Left$(TEST$,2) : PASSECRAN[A$,1,0,0]
  102.       '
  103.       Erase 1 : Load "banqueI/Titror"+LANGUE$+".ABK" : Paste Icon 20,48,TEST
  104.       Erase 2 : Load "BanqueI/Ftdb.abk" : NBI=Length(2) : Make Icon Mask 
  105.       METTOTAL["+",TPTS(TEST),XT,YT]
  106.       Erase 1 : Erase 2 : BRUIT[0,0,"Zoom"] : Hide On : DIAPHRAGME[2,0]
  107.       Screen Close 2 : Screen 0 : Double Buffer : AJOUR
  108.       '
  109.       A$=Left$(TEST$,2)+Str$(48)-" "+".Amos" : POSEVAR
  110.       Screen 7 : Screen To Front 0 : Volume 0
  111.       If Exist("DF0:"+A$) : A$="DF0:"+A$ : End If 
  112.       CLOCK[280,160] : Run A$
  113.       '
  114.       '''''''''''''''  MEMOIRE,STRESS,SONS,REFLEXES   ''''''''''''''''   
  115.    End If 
  116.    If MZ=5 Then BRUITB[1] : PREFERENCES[0] : MZ=0
  117.    If MZ=6
  118.       BRUITB[100] : Amal Off : Bob Off : AJOUR
  119.       Wait 20 : Erase 1 : Erase 2 : Erase 7 : Auto View Off 
  120.       Screen Open 2,16,10,Screen Colour,Lowres : Flash Off 
  121.       Screen To Front 1 : Screen 2 : Get Palette 1 : Wait Vbl : Screen 1
  122.    If LANGUE$="Ang" : L$="Ang" : Else L$="Fra" : End If 
  123.       Load Iff "Decors/A.generique"+L$,0 : Flash Off 
  124.       BRUIT[0,0,"vent"] : T=Timer+800
  125.       Screen To Front 1 : Screen 0 : Fade 1 : Wait 16
  126.       Screen To Front 1 : Auto View On : Wait Vbl : View 
  127.       Screen 1 : Fade 5 : Wait 80
  128.       Screen To Front 0 : Wait 10 : Screen 0 : Fade 5 To 2 : Wait 80
  129.       Reserve As Chip Work 7,32000 : Load "MRbruits/Brt.sbk",7
  130.       Repeat : Until Mouse Key or Timer>T
  131.       BRUITB[100] : BRUIT[0,0,"vent"]
  132.       Fade 5 : Wait 50 : Screen To Front 1 : Screen 1 : Fade 5 To 2
  133.       Wait 82 : Screen Close 2 : Screen Close 0
  134.    End If 
  135. Loop 
  136. '
  137. Procedure INETOILE
  138.    ETOILE: Data 17,18,-5,5,36,31,50,18,61,5,77,31,98,26,137,27
  139.    Data 143,7,178,5,183,19,227,31,244,5,257,5,286,8
  140.    Data 37,63,72,67,95,87,107,112,96,123,103,144,52,121
  141.    A$="A 0,(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)"
  142.    Restore "ETOILE" : For X=1 To 1+Rnd(21) : Read A,B : Next 
  143.    Channel 3 To Bob 3 : Bob 3,A,B,5 : Wait Vbl 
  144.    Amal 3,A$ : Amal On 3
  145. End Proc
  146. '
  147. '                          PROCEDURES GENERALES  
  148. '
  149. Procedure CURSEUR[C]
  150.    BOUTONA=False : BOUTONB=False : BOUTONS=False
  151.    Clear Key 
  152.    Repeat 
  153.       Repeat : T1=Timer+50
  154.          For X=1 To 10
  155.             X=X Mouse : Y=Y Mouse : Wait 3 : U=X Mouse : V=Y Mouse
  156.             Exit If X=U and Y=V
  157.          Next 
  158.          X Mouse=150 : Y Mouse=100 : MX0=X Mouse : MY0=Y Mouse : DM=0
  159.          Repeat 
  160.             If Timer>DIT Then MUSE
  161.             If C=1 : Rem En cours de question 
  162.                If Timer>TSAB : TEMPS[1] : TSAB=Timer+49 : End If 
  163.                If(PTS<1) or(DUREE<1) : MZ=0 : Exit 3 : End If 
  164.                If Timer>TREN : A=0 : Exit 3 : End If 
  165.             End If 
  166.             If C=2 : Rem En menu principal
  167.                If Timer>T1
  168.                   STAR: Data 17,18,-5,5,36,31,50,18,61,5,77,31,98,26,137,27
  169.                   Data 143,7,178,5,183,19,227,31,244,5,257,5,286,8
  170.                   Data 37,63,72,67,95,87,107,112,96,123,103,144,52,121
  171.                   Restore "STAR" : For X=1 To 1+Rnd(21) : Read A,B : Next 
  172.                   Bob 3,A,B, : Wait Vbl : T2=Timer+10+Rnd(20) : T1=T2+200
  173.                End If 
  174.                If Timer>T2
  175.                   If GAUCHE : Bob 3,400,,
  176.                   Else Bob 3,100,,
  177.                   End If : Wait Vbl 
  178.                   T1=Timer+50+50*Rnd(2) : T2=T1+200
  179.                End If 
  180.             End If 
  181.             MX=X Mouse : MY=Y Mouse : A$=Inkey$
  182.          Until A$<>"" or Mouse Key or Abs(MX0-MX)>DM or Abs(MY0-MY)>DM
  183.          K=Mouse Key : R=Asc(A$)
  184.          A=-28*(MX-MX0>DM)-29*(MX0-MX>DM)-30*(MY0-MY>DM)-31*(MY-MY0>DM)
  185.          If(R>27) and(R<32) Then A=R
  186.          X=CX : Y=CY
  187.          If(A=28) Then Add X,1
  188.          If(A=29) Then Add X,-1
  189.          If(A=30) Then Add Y,-1
  190.          If(A=31) Then Add Y,1
  191.       Until((X<0)+(Y<0)+(X>HCR)+(Y>VCR)=0)
  192.       If(X<>CX) or(Y<>CY)
  193.          If(CUR(X,Y,0)=0) and(CUR(X,Y,1)=0)
  194.             If(A=28) or(A=29)
  195.                Repeat : Add Y,-1,0 To VCR
  196.                Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
  197.             End If 
  198.             If(A=30) or(A=31)
  199.                Repeat : Add X,1,0 To HCR
  200.                Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
  201.             End If 
  202.          End If 
  203.          BRUITB[3] : CX=X : CY=Y : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),
  204.          Exit If C=2
  205.       End If 
  206.    Until(K>0)+(R=43)+(R=45)+(R=27)+(R=13)
  207.    MZ=CUR(CX,CY,2)
  208.    BOUTONS=(K>0)+(R=13) : BOUTONA=(K=1)+(K=3)+(R=13) : BOUTONB=(K>1)
  209. End Proc[R]
  210. Procedure INICURS[CX,CY]
  211.    Limit Mouse 
  212.    If Chanan(15) Then Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1), : Pop Proc
  213.    Channel 15 To Bob BCUR : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),NBK+17
  214.    Wait Vbl : Amal 15,"A 0,(R1,46)(R2,4)"
  215.    Amreg(15,1)=NBK+17 : Amreg(15,2)=NBK+18 : Amal On 15 : Clear Key 
  216. End Proc
  217. Procedure VIDCUR[A]
  218.    For X=0 To 12 : For Y=0 To 9 : For Z=0 To 2 : CUR(X,Y,Z)=0
  219.    Next : Next : Next 
  220.    If A=1 : Rem situe les trois fl∩┐╜ches
  221.       For I=0 To 2 : CUR(0,I,0)=XB(I) : CUR(0,I,1)=YB(I)
  222.       CUR(0,I,2)=I+1 : Next 
  223.       HCR=1 : VCR=2
  224.    End If 
  225. End Proc
  226. Procedure PARLE[A$,T]
  227.    ' Paroles sur voix 0 et 3 (code 9)   banque 6  
  228.    If PREF(1)<1 Then Pop Proc
  229.    While Timer<DIT : Wend 
  230.    B=6 : Rem le num∩┐╜ro de la banque qui va jouer
  231.    F=1 : Rem la voie d'acc∩┐╜s disque 
  232.    Volume 9,63 : DERANN$=A$
  233.    T$=TEST$ : If T=2 Then T$="General"
  234.    SEX$=Mid$("FM",1+Rnd(1),1) : If Instr("JapIta",LANGUE$) Then SEX$="F"
  235.    F$="Paroles/"+T$+"/"+LANGUE$+SEX$+"/"+A$
  236.    'F$="Paroles/"+T$+"/"+"FraM/"+A$ 
  237.    If Not Exist(F$) Then Pop Proc
  238.    Open In F,F$ : L=Lof(F) : Close F : DIT=Timer+L/300
  239.    If L>$FFFF Then Pop Proc
  240.    Bload F$,Start(6) : Volume %101,63 : Sam Raw %101,102+Start(6),L,20000
  241.    If Exist(F$+Chr$(50))
  242.       While Timer<DIT : Wend : F$=F$+Chr$(50)
  243.       Open In F,F$ : L=Lof(F)
  244.       If L>64000 : Bell 60 : Pop Proc : End If 
  245.       DIT=Timer+L/300 : Close F
  246.       Bload F$,Start(6) : Sam Raw %101,102+Start(6),L,20000
  247.    End If 
  248.    If T=1 Then While Timer<DIT : Wend 
  249. End Proc
  250. Procedure BRUIT[F,V,A$]
  251.    ' Bruits sur voix 1 (code 2)   (le temps sera sur la voix 2, code 4) 
  252.    ' Banque 6    S=fr∩┐╜quence      V=volume  
  253.    If PREF(2) Then Pop Proc
  254.    While Timer<DIT : Wend : Rem Pause/conflits, utile aussi pour destroypt 
  255.    S=20000 : If F<>0 Then S=1000*F
  256.    Open In 2,"MRbruits/"+A$ : L=Lof(2) : Close 2
  257.    If L>65430 Then Bell 20 : Pop Proc
  258.    Bload "MRbruits/"+A$,Start(6) : DERBRUIT$=A$
  259.    Volume %1010,63 : If V<>0 Then Volume %1010,V
  260.    Sam Raw %1010,Start(6)+100,L,S : DIT=Timer+L/400
  261. End Proc
  262. Procedure BRUITB[N]
  263.    F=20000 : If N=100 Then N=3 : F=30000
  264.    S0=Start(7) : S=Leek(S0+8*N) : L=Leek(S0+8*N+4)
  265.    Volume %1010,32 : Sam Raw %1010,S+S0+105,L-105,F
  266.    'DIT=Timer+L/400*(1-0.2*Ntsc)
  267. End Proc
  268. Procedure JOUE[V,M$]
  269.    If PREF(5) Then Pop Proc
  270.    Repeat : Until Mouse Key : Pop Proc
  271.    B=10 : Rem le num∩┐╜ro de la banque qui va jouer  (banques 10 et 11)  
  272.    F=3 : Rem la voie d'acc∩┐╜s disque 
  273.    Volume 4,63 : If V=0 Then Volume 4,V
  274.    Reserve As Chip Work B,$FFFF : Reserve As Chip Work(21-B),$FFFF
  275.    Open In F,"mrmusic/"+M$
  276.    Repeat : Pof(F)=0 : L0=Lof(F)
  277.       Repeat 
  278.          S$=Input$(F,Min($FFFF,L0)) : B=21-B
  279.          Repeat : Exit If Mouse Key,3 : Until Timer>JOUE
  280.          Copy Varptr(S$),Varptr(S$)+Len(S$) To Start(B)
  281.          Sam Raw 4,Start(B),Len(S$),20000 : JOUE=Timer+Len(S$)/400
  282.          L0=L0-Len(S$)
  283.       Until L0<100 or Mouse Key
  284.    Until Mouse Key
  285.    Close F : Volume 4,0 : Erase B : Erase 21-B : S$="" : F=Free
  286. End Proc
  287. Procedure ALEAMUS[S]
  288.    If S=0 Then FAITMUSE=0 : Fill Start(6) To Start(6)+$FFF0,0 : Pop Proc
  289.    While Timer<DIT : Wend 
  290.    FAITMUSE=1 : Bload "mrsons/chorus/A",Start(6)
  291.    Add DIT,150
  292. End Proc
  293. Procedure MUSE
  294.    If PREF(5)=1 Then Pop Proc
  295.    If FAITMUSE=0 Then Pop Proc
  296.    'Data 196,207.65,220,233.08,246.94 
  297.    Data 261.63,277.18,293.66,311.13,329.63,349.23,370,392,415.3
  298.    Data 440,466.16,493.88,523.25
  299.    N=1+Rnd(11) : Restore : For X=1 To N : Read F : Next : F=20000/392*F
  300.    L=25794 : DIT=Timer+50*(L/F)+10+Rnd(60)
  301.    VOIX=Rnd(1)+4*Rnd(1) : PEDALE=20+Rnd(40)
  302.    Volume VOIX,PEDALE : Sam Raw VOIX,Start(6)+104,L,F
  303. End Proc
  304. Procedure CLIQUE[I]
  305.    Amal Off 1 : Bob Off BCUR : Bob Clear : AJOUR
  306.    BRUIT[0,0,"Bzz"] : H=XB(I-13) : V=YB(I-13)
  307.    Get Block FLCHBK,H,V,40,40,1 : Paste Icon H,V,I : While Mouse Key : Wend 
  308.    ABLOC[FLCHBK]
  309. End Proc
  310. Procedure AIDE
  311. End Proc
  312. Procedure METTOTAL[D$,N,X0,Y0]
  313.    If D$="+" or N>0
  314.       U=N mod 10 : N=(N-U)/10
  315.       If N>0
  316.          D=N mod 10 : N=(N-D)/10
  317.          If N>0
  318.             C=N mod 10
  319.          End If 
  320.       End If 
  321.       Paste Icon X0,Y0,27+C : Wait Vbl 
  322.       Paste Icon X0+13,Y0,27+D : Wait Vbl 
  323.       Paste Icon X0+26,Y0,27+U : Wait Vbl 
  324.    Else 
  325.       Paste Icon X0,Y0,26
  326.       Paste Icon X0+13,Y0,26
  327.       Paste Icon X0+26,Y0,26 : Paste Icon X0+26,Y0,26
  328.    End If 
  329. End Proc
  330. Procedure METPOINTS
  331.    Every Off 
  332.    If PTS<0 Then APTS=0 : Pop Proc
  333.    If PTS>APTS
  334.       For X=Max(1,APTS+1) To PTS
  335.          Restore "PT"+Str$(X)-" " : Read H,V : Paste Icon XP+H,YP+V,1
  336.       Next 
  337.    Else 
  338.       For X=APTS To Max(PTS+1,1) Step -1
  339.          Restore "PT"+Str$(X)-" "
  340.          Read H,V : H=XP+H : V=YP+V : AUTOBLOC[BOULBK,H,V]
  341.       Next 
  342.    End If 
  343.    APTS=PTS
  344. End Proc
  345. Procedure DROITE[E,D]
  346.    Channel 1 To Screen Offset E : Screen E : Screen To Front E
  347.    Amal 1,"M 20,0,5;M R0,0,20;M 20,0,5" : Amreg(1,0)=D : Amal On 1
  348.    While Chanmv(1) : Wend : GAUCHE=False
  349. End Proc
  350. Procedure GAUCHE[E,D]
  351.    Channel 1 To Screen Offset E : Screen E
  352.    Amal 1,"M -20,0,5 ;M R0,0,20;M -20,0,5" : Amreg(1,0)=-D : Amal On 1
  353.    While Chanmv(1) : Wend : GAUCHE=True
  354. End Proc
  355. Procedure DIAPHRAGME[A,B]
  356.    ' montre la moiti∩┐╜ gauche de B arrivant en diaphragme sur A
  357.    Autoback 0 : Screen To Front A
  358.    For X=1 To 59 Step 2
  359.       H0=170-X : H1=170+X : V0=128-X : V1=128+X
  360.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  361.    Next 
  362.    For X=60 To 130 Step 10
  363.       H0=170-X : H1=170+X : V0=128-X : V1=128+X
  364.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  365.    Next 
  366.    For X=131 To 176 Step 20
  367.       H0=170-X : H1=170+X : V0=0 : V1=260
  368.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  369.    Next 
  370.    Screen To Front B : Screen B : Rem Screen Close A 
  371. End Proc
  372. Procedure CLOCK[X,Y]
  373.    Change Mouse 3 : X Mouse=X : Y Mouse=Y : Show On 
  374. End Proc
  375. Procedure PASSECRAN[A$,E,F,G]
  376.    Screen Open 2,360,270,64,Lowres : Flash Off 
  377.    Get Palette E : Screen To Front E
  378.    Screen Copy E,0,0,360,270 To 2,0,0 : Screen Close E
  379.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  380.    Load Iff A$,F : Flash Off : Get Palette 2
  381.    Screen To Front 2 : Screen F
  382.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  383.    If G=1 Then Screen Close 2 : Double Buffer 
  384. End Proc
  385. Procedure BANQBI[B$,I$]
  386.    Amal Off : Bob Off : AJOUR : Erase 1 : Erase 2
  387.    If B$=""
  388.       NBK=0 : Load "BanqueB/BoulesC.abk"
  389.    Else 
  390.       Load "BanqueB/"+B$+".abk" : NBK=Length(1) : Load "BanqueB/BoulesC.abk",1
  391.    End If 
  392.    Load "BanqueI/Ftdb.abk"
  393.    If I$<>"" Then Load "BanqueI/"+I$+".abk",2
  394.    Make Icon Mask 
  395. End Proc
  396. Procedure PREFERENCES[CHOIX]
  397.    PRFV: Data "voice","sounds","language","speed","music"
  398.    PRF1: Data 0,0,6,0,10,7,1,"voice"
  399.    PRF2: Data 1,0,69,0,73,7,2,"sounds"
  400.    PRF3: Data 1,1,37,15,41,21,3,"Language"
  401.    PRF4: Data 0,2,6,30,13,35,8,"speed"
  402.    PRF5: Data 1,2,69,30,74,35,9,"music"
  403.    DRAPEAUX: Data 3,4,6,0,11,5,0,0,0,0,0,0,7
  404.    DIALECTES: Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  405.    SUITE_D_OPTIONS: Data 2,3,4,5,6,13,4,4,4,4,4,4,1
  406.    CLOCK[300,150] : B$="A.PeTdbacc" : BANQBI[B$,""] : ZB=Length(1)+1 : TB=10
  407.    ECR=Screen : ZCR=4
  408.    Screen Open ZCR,112,66,64,Lowres : Flash Off 
  409.    Screen ZCR : Flash Off : Get Palette ECR : Cls 0
  410.    Screen To Front ECR : Screen ZCR : Paste Bob 0,0,TB : Wait Vbl 
  411.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  412.       Read A,B,C,D,E,F,Z
  413.       If X=3
  414.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  415.          If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
  416.       Else 
  417.          If PREF(X) : Paste Bob E,F,Z : End If 
  418.       End If 
  419.    Next : Get Bob ZCR,ZB,0,0 To 111,63 : Screen ECR
  420.    PARLE["Choose",2] : Hide On 
  421.    If CHOIX=0 : H=40 : V=73
  422.       For Z=1 To 64 Step 2
  423.          ZZ=Min(2*Z,112) : Get Bob ZCR,ZB,0,0 To ZZ,Z : Bob 1,H,V,ZB : Wait Vbl 
  424.       Next 
  425.    Else 
  426.       Bob 1,400,10,ZB : Wait Vbl 
  427.       If CHOIX=1
  428.          Limit Bob 1,0,0 To 224,200
  429.          Channel 1 To Bob 1 : Bob 1,222,120, : Wait Vbl 
  430.          Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  431.          H=110 : V=120
  432.       Else 
  433.          Limit Bob 1,158,0 To 400,200
  434.          Channel 1 To Bob 1 : Bob 1,36,120, : Wait Vbl 
  435.          Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  436.          H=148 : V=120
  437.       End If 
  438.    End If 
  439.    VIDCUR[0]
  440.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  441.       Read A,B,C,D,E,F,Z : Add E,H : Add F,V
  442.       If X=3
  443.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  444.          If Z=0 : Z=NBK+16 : End If : Bob X+1,E,F,Z
  445.       Else 
  446.          If PREF(X)
  447.             Bob X+1,E,F,Z
  448.          Else 
  449.             Bob X+1,E,F,NBK+16
  450.          End If : Wait Vbl 
  451.       End If 
  452.    Next : Bob 1,,,TB : Wait Vbl 
  453.    '
  454.    '
  455.    VIDCUR[0] : K=0
  456.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  457.       Read A,B,C,D,E,F,Z,P$ : Add C,H : Add D,V
  458.       CUR(A,B,0)=C : CUR(A,B,1)=D : CUR(A,B,2)=X : Z(X)=Z
  459.       If K<1
  460.          Bob BCUR,CUR(A,B,0),CUR(A,B,1),NBK+17 : Wait Vbl : PARLE[P$,2]
  461.          TEMPS=Timer+50 : Repeat : K=Mouse Key : Until Timer>TEMPS or K>1
  462.       End If 
  463.    Next 
  464.    While Mouse Key : Wend 
  465.    HCR=1 : VCR=2 : INICURS[1,1] : L$=LANGUE$
  466.    Do 
  467.       CURSEUR[0] : If BOUTONB Then MZ=0 : BOUTONB=False
  468.       Exit If MZ=0 or Not(BOUTONS)
  469.       If MZ=3
  470.          Restore SUITE_D_OPTIONS : For X=1 To PREF(3) : Read PREF(3) : Next 
  471.          Restore DIALECTES : For X=1 To PREF(3) : Read LANGUE$ : Next 
  472.          Restore DRAPEAUX : For X=1 To PREF(3) : Read Z : Next 
  473.          If Z=0 : Z=NBK+16 : End If 
  474.          Bob MZ+1,,,Z : Wait Vbl 
  475.       Else 
  476.          If PREF(MZ)
  477.             Bob MZ+1,,,NBK+16 : PREF(MZ)=0
  478.          Else 
  479.             Bob MZ+1,,,Z(MZ) : PREF(MZ)=1
  480.          End If 
  481.       End If : Wait Vbl 
  482.       Restore PRFV : For X=1 To MZ : Read P$ : Next : PARLE[P$,2]
  483.       While Mouse Key : Wend 
  484.    Loop 
  485.    FINDEPREF:
  486.    AJOUR : BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : Wait Vbl 
  487.    CX=1 : CY=0
  488.    Screen ZCR : Paste Bob 0,0,TB
  489.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  490.       Read A,B,C,D,E,F,Z
  491.       If X=3
  492.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  493.          If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
  494.       Else 
  495.          If PREF(X) : Paste Bob E,F,Z : End If 
  496.       End If 
  497.    Next 
  498.    Get Bob ZCR,ZB,0,0 To 111,64 : Screen ECR : Bob 1,,,ZB : Wait Vbl 
  499.    For X=2 To 6 : Bob X,,,NBK+16 : Next 
  500.    If CHOIX=0 : Screen ZCR
  501.       For Z=64 To 1 Step -4
  502.          ZZ=Min(2*Z,112)
  503.          Get Bob ZCR,ZB,0,0 To ZZ,Z : Screen ECR : Bob 1,40,73,ZB : Wait Vbl 
  504.       Next 
  505.       Bob 1,,,NBK+16 : Wait Vbl : Bob Off 1 : Wait Vbl 
  506.    Else 
  507.       Channel 1 To Bob 1 : Bob 1,,,Length(1) : Wait Vbl 
  508.       If CHOIX=1
  509.          Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  510.       Else 
  511.          Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  512.       End If 
  513.    End If : Screen Close ZCR
  514.    Limit Bob : Amal Off : Bob Off : AJOUR : CLOCK[300,150]
  515.    If L$<>LANGUE$
  516.       If CHOIX=0
  517.          A$="Decors/Entree"+LANGUE$ : PASSECRAN[A$,1,1,1]
  518.       End If 
  519.       If CHOIX=1
  520.          Load "banqueI/Titror"+LANGUE$+".ABK" : Paste Icon 20,48,TEST
  521.       End If 
  522.    End If 
  523.    BANQBI["",""]
  524. End Proc
  525. Procedure AUTOBLOC[N,X,Y]
  526.    Update : Update Off : Wait Vbl 
  527.    Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl 
  528.    Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl 
  529.    Update On 
  530. End Proc
  531. Procedure ABLOC[N]
  532.    Update : Update Off : Wait Vbl 
  533.    Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl 
  534.    Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl 
  535.    Update On 
  536. End Proc
  537. Procedure AJOUR
  538.    Update : Wait Vbl : Update : Wait Vbl 
  539. End Proc
  540. Procedure POSEVAR
  541.    Screen Open 7,32,10,16,Lowres : Flash Off : Screen Hide 7 : Screen 7
  542.    For X=1 To 5 : Doke Phybase(0)+2*(X-1),PREF(X) : Next 
  543.    For X=1 To 4 : Doke Phybase(0)+8+2*X,TPTS(X) : Next 
  544. End Proc
  545. Procedure PRENDVAR
  546.    Screen Hide 7 : Screen 7
  547.    For X=1 To 5 : PREF(X)=Deek(Phybase(0)+2*(X-1)) : Next 
  548.    For X=1 To 4 : TPTS(X)=Deek(Phybase(0)+8+2*X) : Next 
  549.    Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  550.    Restore : For X=1 To PREF(3) : Read LANGUE$ : Next 
  551.    Screen Close 7
  552. End Proc
  553. Procedure TEMPS[X]
  554. End Proc
  555. '
  556. Procedure XY
  557.    X0=0 : Y0=0 : Show On : Limit Mouse 
  558.    Repeat 
  559.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  560.       If X<>X0 or Y<>Y0
  561.          Locate 35,1 : Print X;"  " : Locate 35,2 : Print Y;"  "
  562.          X0=X : Y0=Y
  563.       End If 
  564.       K$=Inkey$ : Exit If K$<>""
  565.    Until Mouse Key
  566. End Proc
  567. Procedure VOIR
  568.    Pop Proc
  569.    Pen 21 : Locate 35,1 : Print X
  570.    Shoot : Do : Loop 
  571. End Proc
  572. '''''''''''''''''''''''''''''''''''''
  573. LIRE_LES_PREFCDTV:
  574. '----------------------------------------------------------------------
  575. ' Lecture des preferences CDTV 
  576. '----------------------------------------------------------------------
  577. '
  578. L=1024 : Gosub INIT_STRUCTURES
  579. '
  580. _CREATE_PORT["",0] : _PORT=Param
  581. '
  582. If _PORT
  583.    _CREATEIO[_PORT,48] : _IO=Param
  584.    '
  585.    If _IO
  586.       _OPEN_DEVICE["bookmark.device",BID_CDTVPREFS,_IO,0]
  587.       '
  588.       If Param=0
  589.          PREF$=Space$(12+16)
  590.          _DOIOR[_IO,CMD_READ,0,12,Varptr(PREF$)]
  591.          If Param=0 : FLAG=True : End If 
  592.          _CLOSE_DEVICE[_IO]
  593.       End If 
  594.       '
  595.       _DELETEIO[_IO]
  596.    End If 
  597.    '
  598.    _DELETE_PORT[_PORT]
  599. End If 
  600. '
  601. If FLAG
  602.    'Print "Display X:";Deek(Varptr(PREF$)+0)
  603.    'Print "Display Y:";Deek(Varptr(PREF$)+2)
  604.    'Print "Langage  :";Deek(Varptr(PREF$)+4)
  605.    PREF(3)=Deek(Varptr(PREF$)+4)
  606.    'Print "Audiovol :";Deek(Varptr(PREF$)+6)
  607.    'Print "Flags    :";Deek(Varptr(PREF$)+8)
  608. Else 
  609.    'Print "L'ouverture du device a echoue!" 
  610.    PREF(3)=0
  611. End If 
  612. '
  613. Goto RETOUR
  614. '------------------------------------------------------------------------- 
  615. INIT_STRUCTURES:
  616. '
  617. Global STRUCTURES
  618. Erase 15 : Reserve As Work 15,L
  619. Fill Start(15) To Start(15)+L,0
  620. STRUCTURES=Start(15)
  621. '
  622. ' Library offsets
  623. '
  624. Global _LVOOPENDEVICE,_LVOCLOSEDEVICE
  625. Global _LVOADDPORT,_LVOREMPORT
  626. Global _LVOFINDTASK
  627. Global _LVOALLOCSIGNAL,_LVOFREESIGNAL
  628. Global _LVODOIO
  629. _LVOOPENDEVICE=-444 : _LVOCLOSEDEVICE=-450
  630. _LVOADDPORT=-354 : _LVOREMPORT=-360
  631. _LVOFINDTASK=-294
  632. _LVOALLOCSIGNAL=-330 : _LVOFREESIGNAL=-336
  633. _LVODOIO=-456
  634. '
  635. ' Node definitions 
  636. '
  637. Global _LN_NAME,_LN_PRI,_LN_TYPE
  638. _LN_NAME=$A : _LN_PRI=$9 : _LN_TYPE=$8
  639. '
  640. ' Message port 
  641. '
  642. Global NT_MSGPORT,MP_MSGLIST,MP_SIGTASK,MP_SIGBIT,MP_FLAGS
  643. Global PA_SIGNAL
  644. NT_MSGPORT=$4 : MP_MSGLIST=$14 : MP_SIGTASK=$10 : MP_SIGBIT=$F : MP_FLAGS=$E
  645. PA_SIGNAL=$0
  646. '
  647. ' IO 
  648. '
  649. Global MN_REPLYPORT,MN_LENGTH,NT_MESSAGE
  650. Global IO_COMMAND,IO_OFFSET,IO_LENGTH,IO_DATA
  651. '
  652. MN_REPLYPORT=$E : MN_LENGTH=$12 : NT_MESSAGE=$5
  653. IO_COMMAND=28 : IO_OFFSET=44 : IO_LENGTH=36 : IO_DATA=40
  654. '
  655. ' CDTV 
  656. '
  657. BID_CDTVPREFS=$10001
  658. '
  659. ' Device commands
  660. '
  661. Global CMD_READ,CMD_WRITE
  662. CMD_READ=2 : CMD_WRITE=3
  663. '
  664. Return 
  665. '------------------------------------------------------------------------- 
  666. Procedure _DOIOR[REQ,CMD,OFS,L,D]
  667.    Doke REQ+IO_COMMAND,CMD
  668.    Loke REQ+IO_OFFSET,OFS
  669.    Loke REQ+IO_LENGTH,L
  670.    Loke REQ+IO_DATA,D
  671.    Areg(1)=REQ
  672.    F=Execall(_LVODOIO)
  673. End Proc[F]
  674. Procedure _OPEN_DEVICE[NAME$,UNIT,IO,FLAGS]
  675.    NPOKE[NAME$,0] : Areg(0)=Param
  676.    Dreg(0)=UNIT
  677.    Areg(1)=IO
  678.    Dreg(1)=FLAGS
  679.    F=Execall(_LVOOPENDEVICE)
  680. End Proc[F]
  681. Procedure _CREATE_PORT[NAME$,PRI]
  682.    '
  683.    Dreg(0)=-1 : SIGBIT=Execall(_LVOALLOCSIGNAL)
  684.    '
  685.    If SIGBIT<>-1
  686.       '
  687.       PRT=STRUCTURES : Add STRUCTURES,34
  688.       '
  689.       NPOKE[NAME$,PRT+10]
  690.       Poke PRT+_LN_TYPE,NT_MSGPORT
  691.       Poke PRT+_LN_PRI,PRI
  692.       '
  693.       _FIND_THIS_TASK : Loke PRT+MP_SIGTASK,Param
  694.       Poke PRT+MP_SIGBIT,SIGBIT
  695.       Poke PRT+MP_FLAGS,PA_SIGNAL
  696.       '
  697.       If Leek(PRT+_LN_NAME)
  698.          Areg(1)=PRT
  699.          F=Execall(_LVOADDPORT)
  700.       Else 
  701.          _NEWLIST[PRT+MP_MSGLIST]
  702.       End If 
  703.       '
  704.    End If 
  705.    '
  706. End Proc[PRT]
  707. Procedure _CREATEIO[PRT,S]
  708.    IO=STRUCTURE : Add STRUCTURE,S
  709.    Poke IO+_LN_TYPE,NT_MESSAGE
  710.    Doke IO+MN_LENGTH,S
  711.    Loke IO+MN_REPLYPORT,PRT
  712. End Proc
  713. Procedure _DELETEIO[PRT]
  714.    Poke IO+_LN_TYPE,-1
  715. End Proc
  716. Procedure _DELETE_PORT[PRT]
  717.    '
  718.    If Leek(PRT+_LN_NAME)
  719.       Areg(1)=PRT : F=Execall(_LVOREMPORT)
  720.    End If 
  721.    '  
  722.    Loke PRT+MP_SIGTASK,Leek(PRT+MP_SIGTASK)-1
  723.    Dreg(0)=PRT+MP_SIGBIT : F=Execall(_LVOFREESIGNAL)
  724.    '
  725. End Proc
  726. Procedure _CLOSE_DEVICE[IO]
  727.    Areg(1)=IO
  728.    F=Execall(_LVOCLOSEDEVICE)
  729. End Proc[F]
  730. Procedure _NEWLIST[P]
  731.    Loke P+4,0
  732.    Loke P+8,P
  733.    Loke P,P+4
  734. End Proc
  735. Procedure NPOKE[N$,A]
  736.    '
  737.    If Len(N$)=0 and A<>0
  738.       Loke A,0
  739.    Else 
  740.       If A
  741.          Loke A,STRUCTURES
  742.       Else 
  743.          A=STRUCTURES
  744.       End If 
  745.       '
  746.       For N=1 To Len(N$)
  747.          Poke STRUCTURES,Asc(Mid$(N$,N,1)) : Inc STRUCTURES
  748.       Next 
  749.       Poke STRUCTURES,0 : Inc STRUCTURES
  750.       '
  751.       STRUCTURES=(STRUCTURES+1) and $FFFFFFFE
  752.    End If 
  753.    '
  754. End Proc[A]
  755. Procedure _FIND_THIS_TASK
  756.    Areg(1)=0 : F=Execall(_LVOFINDTASK)
  757. End Proc[F]
  758. '-------------------------------------------------------------------------